Estoy tratando de ejecutar una función de forma asíncrona 20 veces. Tengo la definición de la función:
import axios from 'axios'; async function updateUser (url, user) { return new Promise((resolve, reject) => { axios.put(url, JSON.stringify(user)) .then(response => { //Folio returned code 204 console.log('The user has been updated'); resolve(response.data); }).catch((err) => { //Folio returned error console.error(`Error Text: ${err.response.data}`); console.error(`Error Code: ${err}`); }); }); }; export {updateUser};Luego, intento recorrer a los usuarios en un JSON externo y actualizarlos en mi sistema 20 a la vez:
import {updateUser} from './updateUser.js'; import usersjson from './jsons/users.json'; let promises=[]; if (usersjson.users.length) { try { for (const user of usersjson.users) { update = new promise ((resolve,reject) => { updateUser(url, user) .then((list) => {resolve(list)}) .catch((error)=>{reject(error)}) }); promises.push(update); if (promises.length = 20) { await Promise.all(promises) .then((responses)=> { console.log(responses); promises=[]; }).catch((err)=> { console.log(err); }); } } } catch(err)=> { console.log(err); } }Sin embargo, recibo un mensaje de error en la consola:
await Promise.all(promises) ^^^^^ SyntaxError: Unexpected reserved wordLa versión de mi nodo es 12.19.0 (según las preguntas anteriores, parece que tiene que ser al menos 10, por lo que ese no debería ser el problema).
Cuando ejecuto la función sin esperar, funcionan correctamente (es decir, los usuarios se actualizan en mi sistema). También parece que el ciclo for es asíncrono por sí mismo, pero me temo que si hay demasiadas llamadas simultáneamente, mi sistema bloqueará la API, así que quiero hacer de 20 a 50 llamadas a la vez, como máximo.
Para usar await , debe declarar la función en la que está poniendo await como asíncrono
Por ejemplo:
const functionReturningPromise = (input) => { return new Promise((resolve, reject) => { if (!input) { return reject(); } return resolve(); }); } const functionAwaitingPromise = async () => { for (let i = 0; i < 20; i +=1) { try { await functionReturningPromise(i); console.log(i); } catch (error) { console.log(error); } } }